<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2018/9/15 0015
 * Time: 15:02
 */

namespace app\lib\im;
use think\Config;

/**
 * 短信接口
 * Class Sms
 * @package app\lib\im
 */
class Sms
{
    private $conf=[
        "ext"       =>"",//用户的 session 内容，腾讯 server 回包中会原样返回，可选字段，不需要就填空
        "extend"    =>"",//	短信码号扩展号，格式为纯数字串，其他格式无效。默认没有开通
        "params"    =>[],//模板参数，若模板没有参数，请提供为空数组
        "sig"       =>"",//App 凭证
        "sign"      =>"zcx喂wo娶妳",//短信签名，如果使用默认签名，该字段可缺省
        "tel"       =>[
            "mobile"        =>"",
            "nationcode"    =>""
        ],//国际电话号码，格式依据 e.164 标准为: +[国家码][手机号]
        "time"      =>"",//请求发起时间，UNIX 时间戳（单位：秒），如果和系统时间相差超过 10 分钟则会返回失败
        "tpl_id"    =>"193007"//模板 ID，在控制台审核通过的模板 ID];
    ];

    public function __construct($conf=[]){
        if($conf){
            $this->conf=array_merge($this->conf,$conf);
        }
    }

    /*
     * 发送短信
     * */
    public function sendSms($mobile,$params=[],$nationcode="86"){
        $rand=rand(100000,999999);
        $time=time();
        $sig=$this->getSig($mobile,$rand,$time);
        $this->conf["sig"]=$sig;
        $this->conf["time"]=$time;
        $this->conf["tel"]["mobile"]=$mobile;
        $this->conf["params"]=$params;
        $this->conf["tel"]["nationcode"]=$nationcode;

        $url=sprintf(Config::get("sms.sendUrl"),Config::get("sms.sdkappid"),$rand);
        return curl_post_request($url,$this->conf);
    }

    /*
     * 取得APP凭证
     * */
    private function getSig($mobile,$rand,$time){
        $strMobile = $mobile; //tel 的 mobile 字段的内容
        $strAppKey = Config::get("sms.appkey"); //sdkappid 对应的 appkey，需要业务方高度保密
        $strRand = $rand; //url 中的 random 字段的值
        $strTime = $time; //UNIX 时间戳
        $sig = hash("sha256","appkey={$strAppKey}&random={$strRand}&time={$strTime}&mobile={$strMobile}");
        //$sig=hash("sha256","appkey=5f03a35d00ee52a21327ab048186a2c4&random=7226249334&time=1457336869&mobile=13788888888");
        return $sig;
    }


}